﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using BasicForms;
using GeneralLibs;
using Lists;

namespace BanLe.ThongKeBanHangLe
{
    public partial class FrmThongKeBanLeVB : BasicForms.FrmSupportPrintableComponents
    {
        public FrmThongKeBanLeVB()
        {
            InitializeComponent();
        }

        Store _Store = DanhMucStore.Instance.GetByStoreID(Config.StoreID);

        private void FrmThongKeBanLeVB_Load(object sender, EventArgs e)
        {
            try
            {
                if (DesignMode) return;
                DataTable retTable = new DataTable();
                retTable.Columns.Add("ID", typeof(Guid));
                retTable.Columns.Add("UserName", typeof(string));
                retTable.Columns.Add("FullName", typeof(string));
                int index = 0;
                foreach (CustomSecurity.User obj in CustomSecurity.UserList.Instance.Values)
                {
                    retTable.Rows.Add(retTable.NewRow());
                    retTable.Rows[index]["ID"] = obj.ID;
                    retTable.Rows[index]["UserName"] = obj.UserName;
                    retTable.Rows[index]["FullName"] = obj.FullName;
                    index++;
                }
                cmbNhanVien.DataSource = retTable.DefaultView;
                cmbNhanVien.DisplayColumn = "FullName";
                cmbNhanVien.ValueColumn = "ID";
                cmbNhanVien.AddVisibleColumn("UserName", "UserName");
                cmbNhanVien.AddVisibleColumn("FullName", "Tên đầy đủ");

                cmbMayTinh.DataSource = Lists.DanhMucMayTinh.Instance.DataView;
                cmbMayTinh.DisplayColumn = "Ten";
                cmbMayTinh.ValueColumn = "ID";
                cmbMayTinh.AddVisibleColumn("ID", "ID của máy");
                cmbMayTinh.AddVisibleColumn("Ten", "Tên");

                cmbKyBaoCao.SelectedIndex = 17;

                if (CustomSecurity.User.CurUser != null) cmbNhanVien.EditValue = CustomSecurity.User.CurUser.ID;
                cmbMayTinh.EditValue = Lists.DanhMucMayTinh.Instance.GetByHardwareID(GeneralLibs.LocalSettings.HeThong.HardwareID).ID;

                //chkLocTheoNhanVien.Checked = true;
                //chkLocTheoMay.Checked = true;
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void cmbKyBaoCao_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                FrmThamSoBaoCao.ThietLapKhoangThoiGianBaoCao(cmbKyBaoCao.Text, cmbKyBaoCao, dtNgayBatDau, dtNgayKetThuc);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            if (chkLocTheoNhanVien.Checked && cmbNhanVien.EditValue == null)
            {
                MessageBox.Show("Cần chọn điều kiện nhân viên");
                chkLocTheoNhanVien.Focus();
                return;
            }

            if (chkLocTheoMay.Checked && cmbMayTinh.EditValue == null)
            {
                MessageBox.Show("Cần chọn điều kiện lọc máy tính");
                cmbMayTinh.Focus();
                return;
            }

            DateTime ngayBatDau = dtNgayBatDau.DateTime;
            DateTime ngayKetThuc = dtNgayKetThuc.DateTime;
            if (!(FrmThamSoBaoCao.CheckKyBaoCaoVaThoiDiemKhoaSo(dtNgayBatDau, dtNgayKetThuc))) return;
            if (!(FrmThamSoBaoCao.CheckKyBaoCaoVaThoiDiemKhoaSo(dtNgayBatDau, dtNgayKetThuc))) return;
            string kyBaoCao = cmbKyBaoCao.Text;
            if (kyBaoCao == "Cả năm") kyBaoCao = "Năm " + GeneralLibs.Config.NamTaiChinh.ToString();
            else if (kyBaoCao == "Tùy chọn") kyBaoCao = string.Format("Từ ngày {0}/{1}/{2} đến ngày {3}/{4}/{5}",
                                       ngayBatDau.Day, ngayBatDau.Month, ngayBatDau.Year,
                                       ngayKetThuc.Day, ngayKetThuc.Month, ngayKetThuc.Year);

            SqlConnection con = new SqlConnection(GeneralLibs.LocalSettings.ConnectString);
            DsThongKeBanLeVB ds = new DsThongKeBanLeVB();
            BasicForms.FrmProgressBar.StartShowProgress("Đang xử lý");

            try
            {
                con.Open();
                SqlCommand cmd = con.CreateCommand(); cmd.CommandTimeout = Config.TimeOut;
                cmd.CommandTimeout = 1000 * 10;
                cmd.CommandText = "Select_Detail_KhoanMucThongKeBanLe";
                cmd.CommandType = CommandType.StoredProcedure;
                if (chkLocTheoNhanVien.Checked) cmd.Parameters.AddWithValue("@UserID", cmbNhanVien.EditValue);
                if (chkLocTheoMay.Checked) cmd.Parameters.AddWithValue("@MayTinhID", cmbMayTinh.EditValue);
                cmd.Parameters.AddWithValue("@ThoiDiemDau", ngayBatDau);
                cmd.Parameters.AddWithValue("@ThoiDiemCuoi", ngayKetThuc);

                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds.Select_Detail_KhoanMucThongKeBanLe);

                //Nếu có cột TenNhomCha thì hiển thị để có thể lọc theo nhóm cha. Không có thì thôi chỉ hiện tên nhóm.
                try
                {
                    foreach (DataRow row in ds.Select_Detail_KhoanMucThongKeBanLe.Rows)
                    {
                        if (row["TenNhomCha"] is string && row["TenNhomCha"] != "")
                        {
                            row["TenNhomHangHoa"] = string.Format("{0} ({1})", row["TenNhomHangHoa"], row["TenNhomCha"]);
                        }
                    }
                }
                catch (Exception ex)
                { }

                int count = 0;
                if (!chkShowThongTinTonKho.Checked)
                {
                    gridControlThongKeBanLe.DataSource = ds.Select_Detail_KhoanMucThongKeBanLe;
                }
                else
                {
                    DataTable dt = ds.Select_Detail_KhoanMucThongKeBanLe;
                    dt.Columns.Add("TonKho", typeof(decimal));

                    foreach (DataRow row in dt.Rows)
                    {
                        BasicForms.FrmProgressBar.Status = string.Format("Đang xử lý {0}/{1}", count, dt.Rows.Count);
                        count++;

                        VatTuHangHoa vatTuHangHoa = DanhMucVatTuHangHoa.GetByMa((string)row["MaHangHoa"]);
                        TonKho tonToanBo = TonKho.CalculateTongTonTuThoiDiemKhoaSoGanNhatDenThoiDiemNhapVao(cmd, ngayBatDau, vatTuHangHoa.ID);
                        TonKho phatSinhNhapToanBo = TonKho.CalculatePhatSinhNhapToanBo(cmd, ngayBatDau, ngayKetThuc, vatTuHangHoa.ID);
                        TonKho phatSinhXuatToanBo = TonKho.CalculatePhatSinhXuatToanBo(cmd, ngayBatDau, ngayKetThuc, vatTuHangHoa.ID);
                        decimal soLuongTonToanBo = tonToanBo.SoLuong + phatSinhNhapToanBo.SoLuong - phatSinhXuatToanBo.SoLuong;

                        row["TonKho"] = soLuongTonToanBo;
                    }
                    gridViewThongKeBanLe.Columns["TonKho"].Visible = true;
                    gridControlThongKeBanLe.DataSource = dt;
                }
                FormatNumberInGridView(gridViewThongKeBanLe);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
            finally
            {
                if (con.State == ConnectionState.Open) con.Close();
                //con = null;
                BasicForms.FrmProgressBar.FinishShowProgress();
            }
        }

        private void btnPreview_Click(object sender, EventArgs e)
        {
            if (!_Store.Ten.ToUpper().Contains("TTSHN"))
                gridControlThongKeBanLe.ShowPrintPreview();
            else
            {
                //TTSHN In mẫu khác để lưu
                DsThongKeBanLeVB.DetailTTSHN.Clear();
                DataTable table = (gridControlThongKeBanLe.DataSource as DataTable).Clone();
                for (int i = 0; i < gridViewThongKeBanLe.RowCount; i++)
                    if (!gridViewThongKeBanLe.IsGroupRow(i) && gridViewThongKeBanLe.GetDataRow(i) != null)
                        table.Rows.Add(gridViewThongKeBanLe.GetDataRow(i).ItemArray);

                int stt = 1;
                foreach (DataRow row in table.Rows)
                {
                    DataRow add = DsThongKeBanLeVB.DetailTTSHN.NewRow();
                    add["STT"] = stt++;
                    add["Tên hàng hóa"] = row["TenHangHoa"];
                    add["Giá bán lẻ"] = row["GiaBia"];
                    add["Số lượng"] = row["SoLuong"];
                    add["Chiết khấu"] = row["ChietKhau"];
                    add["VAT"] = row["VAT"];
                    add["Thành tiền"] = row["ThanhTien"];
                    DsThongKeBanLeVB.DetailTTSHN.Rows.Add(add);
                }

                string ngay = string.Format(string.Format("Từ ngày {0} đến ngày {1}", dtNgayBatDau.DateTime, dtNgayKetThuc.DateTime));
                string tongTien = "Tổng tiền: " + colThanhTien.SummaryText + " VNĐ";
                PrintWithHeaderAndFooter(false, DsThongKeBanLeVB.DetailTTSHN, true, true, "BẢNG KÊ BÁN LẺ", ngay, "CENTER", "", "", 1, tongTien, "RIGHT", "", "");
            }
        }

        private void chkLocTheoNhanVien_CheckedChanged(object sender, EventArgs e)
        {
            cmbNhanVien.Visible = chkLocTheoNhanVien.Checked;
        }

        private void chkLocTheoMay_CheckedChanged(object sender, EventArgs e)
        {
            cmbMayTinh.Visible = chkLocTheoMay.Checked;
        }

        private void chkShowThongTinTonKho_CheckedChanged(object sender, EventArgs e)
        {
            if (chkShowThongTinTonKho.Checked)
            {
                btnPrint_Click(null, null);
            }
            else
            {
                gridViewThongKeBanLe.Columns["TonKho"].Visible = false;
            }
        }

        private void gridView_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                if (Config.MoPhieuTrucTiepTuBaoCao == DuocPhepMoPhieuTrucTiepTuBaoCao.KhongDuocPhep) return;

                FrmProgressBar.StartShowProgress("Đang xử lý");

                if (_DanhSachChungTu.Count <= 0) //Load danh sách 1 lần đầu 
                {
                    _DanhSachChungTu.LoadAllFromDB();
                }

                foreach (int index in gridViewThongKeBanLe.GetSelectedRows())
                {
                    if (index >= 0)
                    {
                        DataRow row = gridViewThongKeBanLe.GetDataRow(index);
                        if (row["ChungTuID"] is Guid)
                            listChungTuID.Add((Guid)row["ChungTuID"]);
                    }
                }
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
            finally
            {
                FrmProgressBar.FinishShowProgress();
            }
        }
    }
}
